package com.ct.service;

import java.util.List;

import com.ct.entity.po.Approval;
import com.ct.entity.query.ApprovalQuery;
import com.ct.entity.vo.PaginationResultVO;
import com.ct.entity.vo.ReimbursementVO;
import com.ct.entity.vo.TravelVO;

/**
 * 审批状态表 业务接口
 */
public interface ApprovalService {

    /**
     * 根据条件查询列表
     */
    List<Approval> findListByParam(ApprovalQuery param);

    /**
     * 根据条件查询列表
     */
    Integer findCountByParam(ApprovalQuery param);

    /**
     * 分页查询
     */
    PaginationResultVO<Approval> findListByPage(ApprovalQuery param);

    /**
     * 新增
     */
    Integer add(Approval bean);

    /**
     * 批量新增
     */
    Integer addBatch(List<Approval> listBean);

    /**
     * 批量新增/修改
     */
    Integer addOrUpdateBatch(List<Approval> listBean);

    /**
     * 多条件更新
     */
    Integer updateByParam(Approval bean, ApprovalQuery param);

    /**
     * 多条件删除
     */
    Integer deleteByParam(ApprovalQuery param);

    /**
     * 根据ApprovalId查询对象
     */
    Approval getApprovalByApprovalId(Integer approvalId);

    /**
     * 根据ApprovalId修改
     */
    Integer updateApprovalByApprovalId(Approval bean, Integer approvalId);

    /**
     * 根据ApprovalId删除
     */
    Integer deleteApprovalByApprovalId(Integer approvalId);

    /**
     * 分页查询出差申请
     * 
     * @param userId   工号
     * @param pageNo   页码
     * @param pageSize 页大小
     * @return 分页结果
     */
    PaginationResultVO<TravelVO> getTravelApply(String userId, Integer pageNo, Integer pageSize);

    /**
     * 审批出差申请
     * 
     * @param userId          工号
     * @param approvalId      审批Id
     * @param status          审批状态
     * @param travelRejection 出差拒绝原因
     * @return 审批结果
     */
    Integer approveTravelApply(String userId, String approvalId, String status, String travelRejection);

    /**
     * 分页查询出差申请
     * 
     * @param userId   工号
     * @param pageNo   页码
     * @param pageSize 页大小
     * @return 分页结果
     */
    PaginationResultVO<TravelVO> getAdvanceApply(String userId, Integer pageNo, Integer pageSize);

    /**
     * 审批出差申请
     * 
     * @param userId           工号
     * @param approvalId       审批Id
     * @param payment          支付金额
     * @param status           审批状态
     * @param advanceRejection 出差拒绝原因
     * @return 审批结果
     */
    Integer approveAdvanceApply(String userId, String approvalId, String payment, String status,
            String advanceRejection);

    /**
     * 分页查询报销申请
     * 
     * @param userId   工号
     * @param pageNo
     * @param pageSize 页大小
     * @return 分页结果
     */
    PaginationResultVO<ReimbursementVO> getReimbursementApplyMa(String userId, Integer pageNo, Integer pageSize);

    /**
     * 审批报销申请
     * 
     * @param userId                 工号
     * @param reimbursementId        报销Id
     * @param approvalId             审批Id
     * @param status                 审批状态
     * @param reimbursementRejection 报销拒绝原因
     * @return 审批结果
     */
    Integer approveReimbursementApplyMa(String userId, String reimbursementId,
            String approvalId, String status, String reimbursementRejection);

    /**
     * 分页查询报销申请
     * 
     * @param userId   工号
     * @param pageNo   页码
     * @param pageSize 页大小
     * @return 分页结果
     */
    PaginationResultVO<ReimbursementVO> getReimbursementApplyFi(String userId, Integer pageNo, Integer pageSize);

    /**
     * 审批报销申请
     * 
     * @param userId                 工号
     * @param reimbursementId        报销Id
     * @param approvalId             审批Id
     * @param payment                支付金额
     * @param status                 审批状态
     * @param reimbursementRejection 报销拒绝原因
     * @return 审批结果
     */
    Integer approveReimbursementApplyFi(String userId, String reimbursementId,
            String approvalId, String payment, String status, String reimbursementRejection);

    /**
     * 根据TravelId来查询一个approval对象
     *
     */
    Approval findApprovalByTravelId(Integer travelId);

    Approval getApprovalByTravelId(Integer travelId);
}